    // API: 用户相关接口
import { apiClient } from '@/utils/require'
import type { AxiosResponse } from 'axios'

/**
 * 用户类型定义
 */
export interface User {
  id: number
  username: string
  email?: string
  first_name?: string
  last_name?: string
}

export interface UserProfile {
  id: number
  student_id?: string
  major?: string
  class_name?: string
  gender?: '男' | '女'
  phone?: string
  department?: string
  position?: string
  employee_id?: string
  hire_date?: string
  supervisor?: number
  supervisor_name?: string
  remarks?: string
  cet4_score?: number
  cet4_status?: '未提交' | '审核中' | '已通过' | '未通过'
  cet4_exemption_pic?: string
  cet4_score_pic?: string
  cet4_reject_reason?: string
  cet6_score?: number
  cet6_status?: '未提交' | '审核中' | '已通过' | '未通过'
  cet6_exemption_pic?: string
  cet6_score_pic?: string
  cet6_reject_reason?: string
  created_at: string
  updated_at: string
}

export interface UserDetail extends User {
  profile?: UserProfile
  role?: string
  is_active?: boolean
  is_staff?: boolean
  is_superuser?: boolean
  last_login?: string
  date_joined?: string
}

export interface LoginRequest {
  username: string
  password: string
}

export interface LoginResponse {
  code: number
  message: string
  data: {
    token: string
    user: UserDetail
  }
}

export interface PaginatedResponse<T> {
  count: number
  next: string | null
  previous: string | null
  results: T[]
}

/**
 * 用户认证API
 * 
 * API说明：
 * - 基础路径：/api/auth/
 * - 认证方式：登录接口AllowAny，其他需Token
 * - Token格式：Authorization: Token <your-token>
 */
export const authAPI = {
  /**
   * 用户登录
   * 
   * 接口：POST /api/auth/login/
   * 权限：AllowAny（无需认证）
   * 
   * @param data 登录凭证
   * @param data.username 用户名（必填）
   * @param data.password 密码（必填）
   * 
   * @returns 登录响应
   * @returns.code 状态码（200成功，其他失败）
   * @returns.message 提示信息
   * @returns.data.token 认证Token（需保存到localStorage）
   * @returns.data.user 用户详细信息
   * 
   * @example
   * authAPI.login({ username: 'admin', password: '123456' })
   *   .then(res => {
   *     localStorage.setItem('token', res.data.data.token)
   *     localStorage.setItem('user', JSON.stringify(res.data.data.user))
   *   })
   */
  login: (data: LoginRequest) => {
    return apiClient.post<LoginResponse>('/auth/login/', data)
  },

  /**
   * 用户登出
   * 
   * 接口：POST /api/auth/logout/
   * 权限：已认证用户
   * 
   * 功能：删除服务器端的Token记录
   * 注意：需手动清除本地存储的token和user信息
   * 
   * @example
   * authAPI.logout().then(() => {
   *   localStorage.removeItem('token')
   *   localStorage.removeItem('user')
   *   window.location.href = '/login'
   * })
   */
  logout: () => {
    return apiClient.post('/auth/logout/')
  },

  /**
   * 获取当前登录用户信息
   * 
   * 接口：GET /api/auth/me/
   * 权限：已认证用户
   * 
   * @returns 当前用户的详细信息（包含profile扩展信息）
   * @example
   * authAPI.getCurrentUser().then(res => {
   *   console.log('当前用户：', res.data)
   * })
   */
  getCurrentUser: () => {
    return apiClient.get<UserDetail>('/auth/me/')
  }
}

/**
 * 用户管理API
 * 
 * API说明：
 * - 基础路径：/api/users/
 * - 认证方式：Token认证（必须）
 * - 权限控制：
 *   - 查看用户列表/详情：所有已认证用户
 *   - 创建用户：管理员权限
 *   - 修改用户：本人或管理员
 *   - 删除用户：管理员权限
 */
export const userAPI = {
  /**
   * 获取用户列表
   * 
   * 接口：GET /api/users/
   * 权限：已认证用户
   * 
   * @param params 查询参数
   * @param params.page 页码
   * @param params.page_size 每页数量
   * @param params.search 搜索关键词（支持用户名、邮箱、姓名）
   * @param params.class_name 按班级筛选
   * @param params.major 按专业筛选
   * 
   * @returns 分页的用户列表（包含profile信息）
   */
  getUserList: (params?: {
    page?: number
    page_size?: number
    search?: string
    class_name?: string
    major?: string
  }) => {
    return apiClient.get<PaginatedResponse<UserDetail>>('/users/', { params })
  },

  /**
   * 获取用户详情
   * 
   * 接口：GET /api/users/{id}/
   * 权限：已认证用户
   * 
   * @param id 用户ID
   * @returns 用户完整信息（包含profile、role、权限状态等）
   */
  getUserDetail: (id: number) => {
    return apiClient.get<UserDetail>(`/users/${id}/`)
  },

  /**
   * 创建用户
   * 
   * 接口：POST /api/users/
   * 权限：仅管理员
   * 
   * @param data 用户数据
   * @param data.username 用户名（必填，唯一）
   * @param data.password 密码（必填）
   * @param data.email 邮箱（选填）
   * @param data.profile 扩展信息（学号、专业、班级等）
   * 
   * @returns 创建成功的用户信息
   */
  createUser: (data: Partial<UserDetail>) => {
    return apiClient.post('/users/', data)
  },

  /**
   * 更新用户信息（完整更新）
   * 
   * 接口：PUT /api/users/{id}/
   * 权限：本人或管理员
   * 
   * @param id 用户ID
   * @param data 完整的用户数据
   * @returns 更新后的用户信息
   */
  updateUser: (id: number, data: Partial<UserDetail>) => {
    return apiClient.put(`/users/${id}/`, data)
  },

  /**
   * 部分更新用户信息（推荐）
   * 
   * 接口：PATCH /api/users/{id}/
   * 权限：本人或管理员
   * 
   * @param id 用户ID
   * @param data 需要更新的字段
   * @returns 更新后的用户信息
   * @example
   * // 仅更新手机号
   * userAPI.patchUser(1, { profile: { phone: '13800138000' } })
   */
  patchUser: (id: number, data: Partial<UserDetail>) => {
    return apiClient.patch(`/users/${id}/`, data)
  },

  /**
   * 删除用户
   * 
   * 接口：DELETE /api/users/{id}/
   * 权限：仅管理员
   * 
   * @param id 用户ID
   * @returns 204 No Content
   */
  deleteUser: (id: number) => {
    return apiClient.delete(`/users/${id}/`)
  },

  /**
   * 提交四六级成绩
   * 
   * 接口：POST /api/users/submit_cet/
   * 权限：已认证用户
   * 
   * 注意：图片需先通过 `/api/cos/upload/` 接口上传，获取URL后再提交
   * 
   * @param data 成绩数据
   * @param data.exam_type 考试类型（cet4/cet6）
   * @param data.score 成绩（0-710）
   * @param data.exemption_pic 免修证明图片URL（带姓名）
   * @param data.score_pic 成绩证明图片URL（带姓名和分数）
   * 
   * @returns 更新后的用户信息
   * 
   * @example
   * // 1. 先上传图片
   * const formData1 = new FormData()
   * formData1.append('file', exemptionFile)
   * const res1 = await apiClient.post('/cos/upload/', formData1)
   * const exemptionUrl = res1.data.data.url
   * 
   * const formData2 = new FormData()
   * formData2.append('file', scoreFile)
   * const res2 = await apiClient.post('/cos/upload/', formData2)
   * const scoreUrl = res2.data.data.url
   * 
   * // 2. 提交成绩
   * userAPI.submitCET({ 
   *   exam_type: 'cet4', 
   *   score: 550,
   *   exemption_pic: exemptionUrl,
   *   score_pic: scoreUrl
   * })
   */
  submitCET: (data: { 
    exam_type: 'cet4' | 'cet6'; 
    score: number;
    exemption_pic: string;
    score_pic: string;
  }) => {
    return apiClient.post('/users/submit_cet/', data)
  },

  /**
   * 审核四六级成绩
   * 
   * 接口：POST /api/users/{id}/review_cet/
   * 权限：仅管理员
   * 
   * @param id 用户ID
   * @param data 审核数据
   * @param data.exam_type 考试类型（cet4/cet6）
   * @param data.action 审核操作（approve/reject）
   * @param data.reason 拒绝原因（拒绝时必填）
   * 
   * @returns 更新后的用户信息
   * 
   * @example
   * // 通过
   * userAPI.reviewCET(1, { exam_type: 'cet4', action: 'approve' })
   * // 拒绝
   * userAPI.reviewCET(1, { exam_type: 'cet4', action: 'reject', reason: '成绩单不清晰' })
   */
  reviewCET: (id: number, data: { 
    exam_type: 'cet4' | 'cet6'; 
    action: 'approve' | 'reject'; 
    reason?: string 
  }) => {
    return apiClient.post(`/users/${id}/review_cet/`, data)
  }
}

export default {
  ...authAPI,
  ...userAPI
}
